package com.woniuxy.mq.config;

import org.springframework.amqp.core.*;
import org.springframework.amqp.rabbit.connection.ConnectionFactory;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 消息队列的配置类
 *    创建  queue1
 *    创建  queue2
 *    交换机
 *    绑定交换机 queue1
 *    绑定交换机 queue2
 */
@Configuration
public class RabbitConfig04 {
//
//    //创建交换机
//    @Bean
//    public DirectExchange confirmExchange() {
//        return new DirectExchange("confirm.direct.exchange");
//    }
//
//    //创建队列
//    @Bean
//    public Queue confirmQueue() {
//        return new Queue("confirm.queue");
//    }
//
//    //队列绑定到交换机
//    @Bean
//    public Binding confirmToDirectExchange(Queue confirmQueue, DirectExchange confirmExchange) {
//        return BindingBuilder.bind(confirmQueue).to(confirmExchange).with("msg.confirm");
//    }
//
//
//    /**
//     * 修改RabbitTemplate对象的配置
//     */
//    @Bean
//    public RabbitTemplate rabbitTemplate(ConnectionFactory connectionFactory) {
//        RabbitTemplate rabbitTemplate = new RabbitTemplate(connectionFactory);
//        // 开启消息强制投递
//        rabbitTemplate.setMandatory(true);
//        // 消息到达交换机的确认回调
//        rabbitTemplate.setConfirmCallback((correlationData, ack, cause) -> {
//            System.out.println("消息数据：" + correlationData);
//            if (ack) {  //发送成功
//                System.out.println("消息已到达交换机"); //什么都不用管
//            } else {   // 失败
//                System.out.println("消息未到达交换机，原因是：" + cause);
//                // 检查
//            }
//        });
//
//        // 消息回退：消息无法从交换机路由到队列 （就执行这个方法）
//        // 消息回退：消息数据：null   消息到队列
//        rabbitTemplate.setReturnCallback((Message message, int replyCode, String replyText, String exchange, String routingKey) -> {
//            System.out.println("消息内容：" + message.getBody().toString());
//            System.out.println("响应码：" + replyCode);
//            System.out.println("响应文本：" + replyText);
//            System.out.println("交换机：" + exchange);
//            System.out.println("路由键：" + routingKey);
//        });
//
//        return rabbitTemplate;
//    }
}